package frsf.cidisi.exercise.tp.search;


import frsf.cidisi.faia.solver.search.IStepCostFunction;
import frsf.cidisi.faia.solver.search.NTree;

/**
 * This class can be used in any search strategy like
 * Uniform Cost.
 */
public class CostFunction implements IStepCostFunction {
	double penalizacion = 300;
	double costo_viaje = 200;
	double incentivo_tomarTesoro_Viajar = 100;
	
    /**
     * This method calculates the cost of the given NTree node.
     */

    public double calculateCost(NTree node) {
     
    	String[] cadenaNode= node.getAction().toString().split(" ");
    
    	
    	if(node.getDeep() ==1){
        		//Si viaja no hay penalizacion
    		if(cadenaNode[0].equals("Viajar")){
    			return costo_viaje;
    		}
    		//La accion es tomar Tesoro
    		else{
    			return ((Indiana_State) node.getAgentState()).getCosto();
    		}
    		
    	}
    	
    	else{
    		String[] cadenaPadre= node.getParent().getAction().toString().split(" ");
    		
        	if(cadenaPadre[0].equals("Viajar")){
        		
        		//Si viaja de nuevo existe penalizacion
        		if(cadenaNode[0].equals("Viajar")){
        			return penalizacion;
        		}
        		//La accion es tomar Tesoro, y la del padre es viajar
        		else{    
        			return ((Indiana_State) node.getAgentState()).getCosto();
        		}
        		
        		
        		
        	}
        	
        	//La accion del padre es tomar tesoro
        	else{
        		
        		//Si viaja no hay penalizacion, al contrario se incentiva. Seria como que viajar le sale mas barato
        		if(cadenaNode[0].equals("Viajar")){
        			return incentivo_tomarTesoro_Viajar;
        		}
        		//La accion es tomar Tesoro
        		else{
        			return ((Indiana_State) node.getAgentState()).getCosto();        		}
        		
        		
        		
        	}

    		
    		
    	}
   
    
    	
    	
    	

    	}
    		
    			
    		
    	


}
